package com.study;

import lombok.Data;
import lombok.experimental.Accessors;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zhuzi
 * 2024/11/21 20:53
 *
 * <a href="https://mp.weixin.qq.com/s/Jr_a4-3ZQlg2apl4QUwktQ">restTemplate使用</a>
 * <a href="https://mp.weixin.qq.com/s/Q7dzd0N9MXVkKP-VgjdW5A">restTemplate</a>
 */
@SpringBootTest
public class RestTemplateDemo {

    @Resource
    RestTemplate restTemplate;

    /**
     * getForObject()getForEntity()二者的主要区别在于，
     * getForObject()返回值是HTTP协议的响应体
     */

    @Test
    public void testGet() {
        //请求地址
        String url = "http://localhost:8080/testGet";

        //发起请求,直接返回对象
        ResponseBean responseBean = restTemplate.getForObject(url, ResponseBean.class);
        System.out.println(responseBean.toString());
    }

    /**
     * 单元测试（带参的get请求）
     */
    @Test
    public void testGetByRestFul() {
        //请求地址
        String url = "http://localhost:8080/testGetByRestFul/{1}/{2}";
        //发起请求,直接返回对象（restful风格）
        ResponseBean responseBean = restTemplate.getForObject(url, ResponseBean.class, "001", "张三");
        System.out.println(responseBean.toString());
    }

    /**
     * 带参的get请求(使用占位符号传参)
     */
    @Test
    public void testGetByParam() {
        //请求地址
        String url = "http://localhost:8080/testGetByParam?userName={userName}&userPwd={userPwd}";

        //请求参数
        Map<String, String> uriVariables = new HashMap<>();
        uriVariables.put("userName", "唐三藏");
        uriVariables.put("userPwd", "123456");

        //发起请求,直接返回对象（带参数请求）
        ResponseBean responseBean = restTemplate.getForObject(url, ResponseBean.class, uriVariables);
        System.out.println(responseBean.toString());
    }

    /**
     * *********************************
     * <p>
     * *********************************
     */

    @Data
    @Accessors(chain = true)
    public static class ResponseBean {

    }
}
